/*
  Copyright (C) 2011, Kyungjoo Kim
  
  This file is part of LINAL (LINear ALgebra)
  
  All rights reserved.

  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  
  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
  
  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  Also add information on how to contact you by electronic and paper mail.
  
  
  Kyungjoo Kim
  iamkyungjoo@gmail.com
*/

#include "linal/common.hxx"
#include "linal/util.hxx"

#include "linal/format.hxx"

#include "linal/operation.hxx"

#include "linal/device/operation.hxx"
#include "linal/device/device.hxx"
#include "linal/dispatcher.hxx"

namespace linal {

  static Dispatcher s_dispatcher;

  // --------------------------------------------------------------
  // ** Dispatcher setup
  void set_dispatcher( Dispatcher d ) { s_dispatcher = d; }
  Dispatcher get_dispatcher() { return s_dispatcher; }
  bool comp_dev( Device i, Device j ) { 
    if (i->get_group() < j->get_group()) 
      return true;
    else if (i->get_group() == j->get_group()) 
      if (i->get_id() < j->get_id())
        return true;
      else if (i->get_type() < j->get_type())
        return true;
    return false;
  }

  int Dispatcher_::chol_nopiv  ( int uplo, FLA_Obj &A ) {
    return true;
  }
  int Dispatcher_::chol_piv    ( int uplo, FLA_Obj &A, FLA_Obj &p ) {
    return true;
  }
  int Dispatcher_::ldl_nopiv   ( int uplo, FLA_Obj &A ) {
    return true;
  }
  int Dispatcher_::ldl_piv     ( int uplo, FLA_Obj &A, FLA_Obj &p ) {
    return true;
  }

  int Dispatcher_::qr          ( FLA_Obj &A, FLA_Obj &T ) {
    return true;
  }


  
}
